Kafka REST Proxy Content Types

Kafka REST proxy的request和response的content type包含了数据的三种属性:序列化格式(比如json),API版本(比如v1)和内嵌格式(比如binary)。目前序列化格式只有json,API版本只有v1。

内嵌格式是指produce或者consume的数据的格式,这些数据本身是被内嵌在request或者response中。举个例子,你可以在json序列化的request中嵌入binary格式的数据,数据必须是base64编码的字符串。如果数据本身就是JSON,那么你可以以json格式直接嵌入。

Content Type的格式如下:

1
application/vnd.kafka[.embedded_format].[api_version]+[serialization_format]

当没有内嵌数据时,序列化格式是不能省略的。建议的Content Type是

1
application/vnd.kafka.[embedded_format].v1+json

但省略部分声明也是允许的,比如

1
2
3
application/vnd.kafka+json
application/json
application/octet-stream

这些Content Type没有声明API版本,默认使用最近的稳定版本。如果省略嵌入格式,默认使用binary格式。尽管以上Content Type都是允许的,但考虑到今后版本的兼容性问题,建议写全Content Type,并且检查response的Content Type

Content negotiation也是支持的,所以你可以在Content Type中包含多个不同权重的设置

1
Accept: application/vnd.kafka.v1+json; q=0.9, application/json; q=0.5

当你想用一个新版本的API但又不确定它是否能使用的时候,这就很有用